package at.guigu.service.impl;

import at.guigu.domain.po.User;
import at.guigu.service.IUserService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.LocalDateTime;
import java.util.List;

/**
 * `lambdaQuery()`方法的需求示例
 */
@SpringBootTest
class UserServiceImplTestThree {
    @Autowired
    private IUserService userService;

    // 查询名字为Rose的用户(假设名为Rose的只有一个)
    @Test
    void test1() {
        User user = userService.lambdaQuery()
                .eq(User::getUsername, "Rose")
                .one();// one()代表结果只有一个
        System.out.println(user);
    }
    // 查询名字中含a的用户
    @Test
    void test2() {
        List<User> users = userService.lambdaQuery()
                .like(User::getUsername, "a")
                .list();// list()代表结果有多个
        users.forEach(System.out::println);
    }
    // 统计名字中含o的用户数量
    @Test
    void test3() {
        Long nums = userService.lambdaQuery()
                .eq(User::getUsername, "o")
                .count();
        System.out.println("名字中含o的用户数量为：" + nums);
    }

    /**
     * 定义一个方法，接收参数为username、status、minBalance、maxBalance，参数可以为空，此时：
     *若username不为空，则采用模糊查询
     *若status不为空，则采用精确匹配
     *若minBalance不为空，则余额必须大于minBalance
     *若maxBalance不为空，则余额必须小于maxBalance
     * @param username
     * @param status
     * @param min
     * @param max
     * @return List<User>
     */
    public List<User> test4(String username, Integer status, Long min, Long max) {
        return userService.lambdaQuery()
                .like(username != null, User::getUsername, username)
                .eq(status != null, User::getStatus, status)
                .gt(min != null, User::getBalance, min)
                .lt(max != null, User::getBalance, max)
                .list();
    }
}